package us.proyecto.canarios.actions.admin;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URISyntaxException;
import java.net.URL;
import java.util.Iterator;
import java.util.List;

import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Begin;
import org.jboss.seam.annotations.FlushModeType;
import org.jboss.seam.annotations.In;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.datamodel.DataModel;
import org.jboss.seam.annotations.datamodel.DataModelSelection;
import org.jboss.seam.log.Log;

import us.proyecto.canarios.dao.DiccionarioDAO;
import us.proyecto.canarios.domain.Tipo;
import us.proyecto.canarios.domain.Usuario;

@Name("mantCanarios")
@Scope(ScopeType.SESSION)
public class MantTiposAction {

	 @Logger
	 Log log;

	 @In(create = true)
	 private DiccionarioDAO diccionariosDAO;

	 @DataModel("listaCanarios")
	 private List<Tipo> listaCanarios;
	 @DataModelSelection("listaCanarios")
	 private Tipo canarioSel;

	 private boolean seleccionado = false;

	 private boolean nuevo = false;

	 private Tipo canario;
	 
	 private InputStream foto;
	 
	 private byte[] fotoNoDis;
	 
	 private String nombre;
	 
	 private String mimeType;
	 
	 private boolean consulta = false;
	 
	 @In(create = true, required = false)
	 private Usuario user;
	 

	 public void editar(){
		 seleccionado = true;

		 canario = canarioSel;
		 
		 

	 }

	 public void eliminar() {
		 if(canarioSel == canario) {
			 canario = new Tipo();
			 seleccionado = false;

		 }
		 listaCanarios.remove(canarioSel);

	 }
	 
	 public void vacio(){
		 
	 }

	 public void anadir(){
		 if(!seleccionado){
			 listaCanarios.add(canario);
		 }
		 canario = new Tipo();
		 seleccionado = false;
	 }

	 public void cancelar(){
		 seleccionado = false;
		 canario = new Tipo();
	 }

	 public void guardar(){

		 Iterator<Tipo> itTipo = listaCanarios.iterator();
		 while(itTipo.hasNext()) {
			 Tipo tipo = itTipo.next();
			 diccionariosDAO.guardarTipo(tipo);
		 }
	 }

	 @Begin(join = true, flushMode=FlushModeType.MANUAL)
	 public void gestion(){
		 seleccionado = false;
		 canario = new Tipo();
		 listaCanarios = diccionariosDAO.getListaTipos();
		 URL uri = this.getClass().getClassLoader().getResource("plantillas/imagenNoDisp.jpg");
		 
		 try {
			File file = new File(uri.toURI());
			InputStream is = new FileInputStream(file);
			fotoNoDis = new byte[is.available()];
			is.read(fotoNoDis);
			is.close();
			
		} catch (URISyntaxException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		if(user == null || user.getIdUsuario()==0){
			consulta = true;
		}else{
			consulta = false;
		}
	 }

	public List<Tipo> getListaCanarios() {
		return listaCanarios;
	}

	public void setListaCanarios(List<Tipo> listaCanarios) {
		this.listaCanarios = listaCanarios;
	}

	public Tipo getCanarioSel() {
		return canarioSel;
	}

	public void setCanarioSel(Tipo canarioSel) {
		this.canarioSel = canarioSel;
	}

	public boolean isSeleccionado() {
		return seleccionado;
	}

	public void setSeleccionado(boolean seleccionado) {
		this.seleccionado = seleccionado;
	}

	public boolean isNuevo() {
		return nuevo;
	}

	public void setNuevo(boolean nuevo) {
		this.nuevo = nuevo;
	}

	public Tipo getCanario() {
		return canario;
	}

	public void setCanario(Tipo canario) {
		this.canario = canario;
	}

	public InputStream getFoto() {
		return foto;
	}

	public void setFoto(InputStream foto) {
		this.foto = foto;
	}

	
	
	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getMimeType() {
		return mimeType;
	}

	public void setMimeType(String mimeType) {
		this.mimeType = mimeType;
	}

	public void subirFoto() throws IOException{
		if (foto != null && nombre != null && nombre.length() > 0) {
			byte[] b = new byte[foto.available()];
			foto.read(b);
			foto.close();
			
			CharSequence ch = new String("\\");

            if (nombre.contains(ch)) {
            	nombre = nombre.substring(nombre.lastIndexOf('\\') + 1, nombre.length());
            }
            canario.setFoto(b);
            canario.setNombreFoto(nombre);
            canario.setMimetype(mimeType);
		}
	}

	public byte[] getFotoNoDis() {
		return fotoNoDis;
	}

	public void setFotoNoDis(byte[] fotoNoDis) {
		this.fotoNoDis = fotoNoDis;
	}

	public boolean isConsulta() {
		return consulta;
	}

	public void setConsulta(boolean consulta) {
		this.consulta = consulta;
	}

	public Usuario getUser() {
		return user;
	}

	public void setUser(Usuario usuario) {
		this.user = usuario;
	}

	
	
	 
}
